Monografias.com > Sin categoría
Descargar Imprimir Comentar Ver trabajos relacionados

Introducción a los Patrones de Creación de Software (página 2)




Enviado por Pablo Turmero



Partes: 1, 2, 3, 4

Monografias.com
11
parseRTF {
while (t = “obtener siguiente token”) {
switch(t.tipo) {
case Car: conversor.convertirCaracter(t.char);break;
case Font:
conversor.convertirCambioFont(t.font);break;
case Par: conversor.convertirParrafo(); break
}
}
}

ConversorTeX ctex = new ConversorTeX()
RTFTraductor trad = new RTFTraductor (ctex, doc)
trad.parseRTF(doc)
TextoTex texto = conversorTex.getTextoTeX():

Builder

Monografias.com
12
Builder
Aplicabilidad
Cuando el algoritmo para crear un objeto complejo debe ser independiente de las piezas que conforman el objeto y de cómo se ensamblan.
El proceso de construcción debe permitir diferentes representaciones para el objeto que se construye.

Monografias.com
13
Builder
Consecuencias
Permite cambiar la representación interna del producto.
Separa el código para la representación y para la construcción.
Los clientes no necesitan conocer nada sobre la estructura interna.
Diferentes “directores” pueden reutilizar un mismo “builder”
Proporciona un control fino del proceso de construcción.

Monografias.com
14
Builder
Implementación
La interfaz de Builder debe ser lo suficientemente general para permitir la construcción de productos para cualquier Builder concreto.
La construcción puede ser más complicada de añadir el nuevo token al producto en construcción.
Los métodos de Builder no son abstractos sino vacíos.
Las clases de los productos no siempre tienen una clase abstracta común.

Monografias.com
15
Ejemplo: Laberinto
public class BuilderLaberinto {
public void buildLaberinto () { };
public void buildPuerta (int r1, int r2) { };
public void buildHabitacion(int n) { };
public Laberinto getLaberinto() { };
protected BuilderLaberinto() { };
}

Las “paredes” forman parte de la representación interna

Monografias.com
16
public class JuegoLaberinto {
public Laberinto makeLaberinto (BuilderLaberinto builder) {
builder.buildLaberinto();

builder.buildHabitacion(1);
builder.buildHabitacion(2);
builder.buildPuerta(1,2);

return builder.getLaberinto(); }
}

class BuilderLabNormal extends BuilderLaberinto {
private Laberinto labActual;
// se define la construcción de un laberinto con determinado tipo de
// puertas y habitaciones

}
Ejemplo: Laberinto

Monografias.com
class BuilderLabNormal extends BuilderLaberinto {
private Laberinto labActual;
public BuilderLabNormal () { labActual = null; }
public void buildLaberinto () { labActual = new Laberinto(); }
public Laberinto getLaberinto () { return labActual; }
public void buildHabitacion (int n) {
if ( ! labActual.tieneHabitacion(n) ) {
Habitacion hab = new Habitacion (n);
labActual.addHabitacion (hab);
hab.setLado (Norte, new Pared());
hab.setLado (Sur, new Pared());
hab.setLado (Este, new Pared());
hab.setLado (Oeste, new Pared()); }
}
public void buildPuerta (int n1, int n2)) {
Habitacion h1 = labActual.getHabitacion(n1);
Habitacion h2 = labActual.getHabitacion(n2);
Puerta p = new Puerta(h1,h2);
h1.setLado(paredComun(h1,h2), p);
h2.setLado(paredComun(h2,h1), p); }
}
Laberinto lab;
JuegoLaberinto juego;
BuilderLabNormal builder;

lab = juego.makeLaberinto(builder);

Monografias.com
18
Factory Method (Método Factoría)
Propósito
Define un interfaz para crear un objeto, pero permite a las subclases decidir la clase a instanciar: instanciación diferida a las subclases.
Motivación
Una clase C cliente de una clase abstracta A necesita crear instancias de subclases de A que no conoce.
En un framework para aplicaciones que pueden presentar al usuario documentos de distinto tipo: clases Aplicación y Documento.
Se conoce cuándo crear un documento, no se conoce de qué tipo.

Monografias.com
19
Estructura
Método Factoría

Monografias.com
20
Método Factoría
Aplicabilidad
Una clase no puede anticipar la clase de objetos que debe crear.
Una clase desea que sus subclases especifiquen los objetos que debe crear.

Monografias.com
21
Método Factoría
Consecuencias
Evita ligar un código a clases específicas de la aplicación.
Puede suceder que las subclases de Creador sólo se crean con el fin de la creación de objetos.
Mayor flexibilidad en la creación: subclases ofreciendo versiones extendidas de un objeto.
El método factoría puede ser invocado por un cliente, no sólo por la clase Creador: jerarquías paralelas

Monografias.com
22
Método Factoría
Implementación
Dos posibilidades
Creador es una clase abstracta con un método factoría abstracto.
Creador es una clase concreta que ofrece una implementación por defecto del método factoría.
El método factoría puede tener un parámetro que identifica a la clase del objeto a crear.
Se evita crear subclases de Creador con:
Metaclases (Smalltalk y Java)
Genericidad (C++)

Monografias.com
23
Método Factoría y Genericidad C++
template
class Creador {
public:
virtual Producto* crearProducto {
return new elProducto;
}
}
class MiProducto : public Producto { … }

Creador miCreador;

Monografias.com
24
Metaclases
Una clase puede ser considerada un objeto:
¿Cuál es su clase?
Metaclase
Clase que describe clases, sus instancias son clases.
Propiedades: lista de atributos, lista de variables de clase, lista de métodos, lista de métodos de clase.
Java, Ruby y Smalltalk tienen metaclases
Útil en programación avanzada, cuando se manejan entidades software, p.e. depuradores, inspectores, browsers,..

Monografias.com
25
Metaclases
Metainformación
Clases, atributos, métodos, etc., son representados por clases.
Posibilidades
Crear o modificar clases en tiempo de ejecución.
Parametrizar métodos por clases o métodos.
Consultar estructura y comportamiento de una clase.

Monografias.com
26
Metaclases
void metodo1 (Class c) {
“crear instancia de la clase c”
}
void metodo2 (String c) {
“obtener instancia de metaclase para clase c”
“crear instancia de la clase c”
}
void metodo3 (Metodo m) {
“invocar a m”
}

Monografias.com
27
Reflexión o Instropección en Java
La clase Class es el punto de arranque de la reflexión.
Class representa clases, incluye métodos que retornan información sobre la clase:
getFields, getMethods, getSuperClass, getClasses, getConstructors, getModifiers, getInterfaces,..
Field representa atributos (hereda de Member):
getType, getName, get, set,..
Method representa métodos (hereda de Member):
getName, getReturnType, getParameterTypes,..

Monografias.com
28
Reflexión o Instropección en Java
Existe una instancia de Class por cada tipo (interface o clase).
Cuatro formas de obtener un objeto Class

Cuenta oc; Class clase

clase = oc.getClass()
clase = Cuenta.class
clase = Class.forName(“Cuenta”)
Utilizando un método que retorna objetos Class

Ejercicio: Escribe una clase que imprima los nombres de los campos y métodos de una clase dada.

Monografias.com
29
Reflexión o Instropección en Java
Crear una instancia de una clase de la que se conoce su nombre, nomClase:
Class.forName(nomClase).newInstance()
Construir un mensaje (método invoke en Method)

invoke(Object sobreEste, Object[] params)

getMethod(nom, parametros) retorna el método con nombre nom de la clase.

Monografias.com
30
Ejemplo: Laberinto
public class JuegoLaberinto {
public Laberinto nuevoLaberinto () {…};

public Laberinto crearLaberinto() { return new Laberinto(); };
public Habitacion crearHabitacion(int n)
{ return new Habitacion(n); };
public Pared crearPared() { return new Pared(); };
public Puerta crearPuerta(Habitacion h1, Habitacion h2)
{ return new Puerta(h1,h2); };

}

Partes: 1, 2, 3, 4
 Página anterior Volver al principio del trabajoPágina siguiente 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter